package skyinline.swing;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

	/**
	 *	메뉴 작성법 
	 *	JMenuBar -> JMenu -> JMenuItem
	 */
public class SwingMenu extends JMenuBar {
	
	private JMenu mnFile = null;			// 파일
	private JMenu mnEdit = null;			// 편집
	private JMenu mnView = null;		// 보기
	private JMenu mnTool = null;			// 도구
	private JMenu mnWnd = null;		// 창
	private JMenu mnHelp = null;		// 도움말
	
	private static SwingMenuActionListener mnal = null;
	
	public SwingMenu() {
		mnal = new SwingMenuActionListener();
		makeMenu();
		makeMenuItemFile();
		makeMenuItemEdit();
		makeMenuItemView();
		makeMenuItemTool();
		makeMenuItemWnd();
		makeMenuItemHelp();
		addShortCut();
		addMenu();
	}

	//	메뉴바에 추가할 메뉴를 생성함
	private void makeMenu() {
		mnFile = new JMenu( "파 일(F)" );
		mnEdit = new JMenu( "편 집(E)" );
		mnView = new JMenu( "보 기(V)" );
		mnTool = new JMenu( "도 구(T)" );
		mnWnd = new JMenu( "창(W)" );
		mnHelp = new JMenu( "도움말(H)" );
		//	mnFile.setFont(new Font("맑은 고딕", Font.BOLD, 14));
		//	메뉴 글꼴 변경을 위해 setFont 메서드 사용
		//	하지만, 모든 메뉴와 메뉴항목에 setFont를 사용하는 것은 무척 번거로운 일임
		//	폰트들 다른 것으로 바꾸기라도 한다면.....ㅠㅠ
		//	따라서, 프로그램 전체 글꼴을 변경하는 방법을 이용
		//	main 메서드에서 FontUIResource 이용함
	}
	
	//	메뉴에 메뉴항목 추가
	private void makeMenuItemFile() {
		mnFile.add( makeMenuItems("새 파일(N)          ", "new", KeyEvent.VK_N, true, KeyEvent.VK_1) );
		mnFile.addSeparator();
		mnFile.add( makeMenuItems("닫  기(C)", "close", KeyEvent.VK_C, false, KeyEvent.VK_2) );
		mnFile.addSeparator();
		mnFile.add( makeMenuItems("종  료(X)", "exit", KeyEvent.VK_X, true, KeyEvent.VK_3) );
		
	}
	
	private void makeMenuItemEdit() {
		// TODO Auto-generated method stub
		
	}

	private void makeMenuItemView() {
		// TODO Auto-generated method stub
		
	}
	
	private void makeMenuItemTool() {
		// TODO Auto-generated method stub
		
	}
	
	private void makeMenuItemWnd() {
		// TODO Auto-generated method stub
		
	}
	
	private void makeMenuItemHelp() {
		mnHelp.add( makeMenuItems("프로젝트 정보(I)", "about", KeyEvent.VK_I, false, KeyEvent.KEY_LOCATION_UNKNOWN) );
	}
	
	//	메뉴항목에 단축키 지정
	private void addShortCut() {
		mnFile.setMnemonic( KeyEvent.VK_F );
		mnEdit.setMnemonic( KeyEvent.VK_E );
		mnView.setMnemonic( KeyEvent.VK_V );
		mnTool.setMnemonic( KeyEvent.VK_T );
		mnWnd.setMnemonic( KeyEvent.VK_W );
		mnHelp.setMnemonic( KeyEvent.VK_H );
	}

	// 생성 및 설정된 메뉴를 메뉴바에 추가
	private void addMenu() {
		add(mnFile);
		add(mnEdit);
		add(mnView);
		add(mnTool);
		add(mnWnd);
		add(mnHelp);
	}
	
	//	메뉴에 추가할 메뉴항목(menuitem) 생성
	//	배열을 이용하면 조금 편해짐
	private JMenuItem makeMenuItems( String text, String img,
			int skey, boolean off, int akey ) {
		String icon = null;		// 메뉴에 쓸 아이콘
		if ( img != null )				// 아이콘 이미지가 있으면 
			icon = "/images/menu/" + img + ".png";
		
		JMenuItem mnitem = null;
		try {
			mnitem = new JMenuItem(text, new ImageIcon( getClass().getResource( icon )));
		} catch(Exception e) {
			mnitem = new JMenuItem(text);
		}
		// mnitem.setEnabled(off);		// 메뉴 활성/비활성
		mnitem.setMnemonic( skey);
		mnitem.setAccelerator( KeyStroke.getKeyStroke( akey, ActionEvent.CTRL_MASK ) );		// 단축키
		
		//	이벤트 처리관련
		mnitem.addActionListener( mnal );
		mnitem.setActionCommand( img );
		
		return mnitem;
	}
	
}
